package sd.settemmezzo.graphic;

import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import java.util.Observable;
import java.util.Observer;
import java.util.Vector;

import javax.swing.*;
import javax.swing.border.*;

import sd.settemmezzo.player.state.*;
import sd.settemmezzo.player.state.Deck.Carta;
import sd.settemmezzo.util.Debug;
import sd.settemmezzo.util.Util;
import sd.settemmezzo.common.Player;
import sd.settemmezzo.graphic.UI_Client;

public class UI_Client extends JFrame implements Observer {
	
	private static final long serialVersionUID = 1L;
	private LocalState lstate = LocalState.getInstance();
	private GlobalState gstate;
	private Integer puntata_int = 0;
	private Integer ammontare = 50;
	private float punteggioMano = 0f;
	private String pathCarteGrandi = "carte/100x182/";
	private String pathCartePiccole = "carte/44x75/";
    private String pathCarteBack = "carte/Back.png";
    
    private Mossa mossa;
	private static UI_Client instance;
    
	int x_label = 5;
	int count = 0;
	
	public class Mossa {
		public int puntata;
		public Carta carta;
		
		private Mossa() {}

		private Mossa(int puntata, Carta carta) {
			this.puntata = puntata;
			this.carta = carta;
		}
	}
	
	public static UI_Client getInstance(String name) {
		if (instance == null)
			instance = new UI_Client(name);
		return instance;
	}
	
	private UI_Client(String name) {
		initComponents();
		this.setTitle(name + " - sette e mezzo");
		label_name.setText(name);
		Diminuisci.setEnabled(false);
		Punta.setEnabled(false);
		Carta.setEnabled(false);
		Stai.setEnabled(false);
		Aumenta.setEnabled(false);
		field_rimanente.setText(ammontare.toString()+" €");
		this.setVisible(true);
	}

	private void PuntaActionPerformed(ActionEvent e) {
			
		label_msg.setText("PUNTATA EFFETTUATA!!!");
		Aumenta.setEnabled(false);
		Diminuisci.setEnabled(false);
		Punta.setEnabled(false);
		
		if (punteggioMano == 7.5f){
			Carta.setEnabled(false);
		}else {
			Carta.setEnabled(true);
		}
		Stai.setEnabled(true);
		
		//mossa.puntata = puntata_int;
		gstate.setPuntata(lstate.getId(), puntata_int);
	}

	
	private void AumentaActionPerformed(ActionEvent e) {
	
		puntata_int = puntata_int + 5;
		field_puntata.setText(puntata_int.toString()+" €");
		ammontare = ammontare - 5;
		field_rimanente.setText(ammontare.toString()+" €");
		if (ammontare == 0){
			Aumenta.setEnabled(false);	
		}
		Punta.setEnabled(true);
		Diminuisci.setEnabled(true);
	
	}
	

	private void DiminuisciActionPerformed(ActionEvent e) {
			
		puntata_int = puntata_int - 5;
		field_puntata.setText(puntata_int.toString()+" €");
		ammontare = ammontare + 5;
		field_rimanente.setText(ammontare.toString()+" €");
		if (puntata_int == 0){
			Diminuisci.setEnabled(false);
			Punta.setEnabled(false);
		}else Punta.setEnabled(true);
		Aumenta.setEnabled(true);
		
	}
	
	public synchronized Mossa waitForPlay(GlobalState gs) {
		
		mossa = null;
		
		//if (lstate.isLeader()) {
		if (lstate.getId() == gstate.getMazziere().getId()) {
			Carta.setEnabled(true);
			Stai.setEnabled(true);
		} else if (gs.getPuntata(lstate.getId()) == 0) { 
			Aumenta.setEnabled(true);
		}
		label_turno.setText("");
		
		gstate = gs;
		
//		punteggioMano = Util.calcolaPunteggio(gs.getCarte(lstate.getId()));
//		Punteggio.setText(Float.toString(punteggioMano));
		
		try {
			wait(60000);
		} catch (InterruptedException e) { 
			e.printStackTrace();
		}
		
		/* Timeout scaduto */
		if (mossa == null) {
			mossa = new Mossa();
			if (gstate.getPuntata(lstate.getId()) == 0) {
				if (gstate.getMazziere().getId() == lstate.getId())
					mossa.puntata = 0;
				else 
					mossa.puntata = 5;
				
				gstate.setPuntata(lstate.getId(), mossa.puntata);
			} else {
				mossa.puntata = gstate.getPuntata(lstate.getId());
			}
			
			mossa.carta = null;
			
			label_turno.setText("Timeout! Stai");
			field_puntata.setText(gstate.getPuntata(lstate.getId()) + " €");
			field_rimanente.setText(ammontare - gstate.getPuntata(lstate.getId()) + " €");
			Carta.setEnabled(false);
			Stai.setEnabled(false);
			Aumenta.setEnabled(false);

			gstate.setToken(gstate.getRing().getNext(lstate.getId()).getId());
			
		}
		
		return mossa;
	}
	

	private synchronized void CartaActionPerformed(ActionEvent e) {
				
		// boolean passa = false;
		
		Carta newCarta = gstate.getDeck().estraiCarta();
		
		Aumenta.setEnabled(false);
		Diminuisci.setEnabled(false);
		Punta.setEnabled(false);
		
		// Se è finito il mazzo
		if (newCarta == null) {
			Messaggio.setText("MAZZO FINITO!");
			Carta.setEnabled(false);
			Stai.setEnabled(true);
			
		} else {
		
			gstate.addCarta(lstate.getId(), newCarta);
			punteggioMano = Util.calcolaPunteggio(gstate.getCarte(lstate.getId()));
			
			mossa = new Mossa();
			mossa.carta = newCarta;
			mossa.puntata = gstate.getPuntata(lstate.getId());
			
			//if (passa) {
			if (punteggioMano >= 7.5f) {
		    	Carta.setEnabled(false);
				Stai.setEnabled(false);
				//gstate.setToken(lstate.getNextPlayer().getId());
				gstate.setToken(gstate.getRing().getNext(lstate.getId()).getId());
			}
		}
		
		notifyAll();
	}
	
	private synchronized void StaiActionPerformed(ActionEvent e) {
		
		System.out.println("sto...");
		label_turno.setText("Stai");
		Carta.setEnabled(false);
		Stai.setEnabled(false);
		
		mossa = new Mossa();
		mossa.carta = null;
		mossa.puntata = gstate.getPuntata(lstate.getId());
		
		//gstate.setToken(lstate.getNextPlayer().getId());
		gstate.setToken(gstate.getRing().getNext(lstate.getId()).getId());
		notifyAll();
	}


	private void AbbandonaActionPerformed(ActionEvent e) {

		System.out.println("abbandono...");
		label_turno.setText("Abbandoni");
		Abbandona.setEnabled(false);
		Carta.setEnabled(false);
		Stai.setEnabled(false);
		
		System.exit(0);
	}
	
	public void resetTavolo() {
		Messaggio.setText("");
		x_label = 5;
		label_msg.setText("Scegli la puntata");
		tavolo.removeAll();
		label_cartaCoperta.setIcon(null);
		tavolo.add(label_cartaCoperta, JLayeredPane.DEFAULT_LAYER);
		label_carta1.setIcon(null);
		tavolo.add(label_carta1, JLayeredPane.DEFAULT_LAYER);
		label_carta2.setIcon(null);
		tavolo.add(label_carta2, JLayeredPane.DEFAULT_LAYER);
		label_carta3.setIcon(null);
		tavolo.add(label_carta3, JLayeredPane.DEFAULT_LAYER);
		label_carta4.setIcon(null);
		tavolo.add(label_carta4, JLayeredPane.DEFAULT_LAYER);
		label_carta5.setIcon(null);
		tavolo.add(label_carta5, JLayeredPane.DEFAULT_LAYER);
		tavolo.updateUI();
	}
	
	public void resetTavolo(String message) {
		new Thread() {
			public void run() {
				JOptionPane.showMessageDialog(IO, gstate.getMessage(), "Resoconto di fine mano",
						JOptionPane.INFORMATION_MESSAGE, null);
			}
		}.start();
		resetTavolo();
	}

	@Override
	public void update(Observable o, Object arg) {
		
		gstate = (GlobalState)o;
		
		/* Controllo se ho finito i soldi, quindi perso */
		if (gstate.getSoldi(lstate.getId()) == 0) {
			Messaggio.setText("HAI PERSO!");
			if (gstate.countActivePlayers() > 1) label_turno.setText("Puoi comunque seguire la partita");
			else label_turno.setText("La partita è finita!");
			Aumenta.setEnabled(false);
			field_puntata.setText("0 €");
			ammontare = gstate.getSoldi(lstate.getId());
			field_rimanente.setText(ammontare.toString()+" €");
			
		} else {
		
			/* Se non ho perso, controllo se è il primo giro */
			if (gstate.getCarte(lstate.getId()).size() == 1
					&& gstate.getPuntata(lstate.getId()) == 0) {
			
				puntata_int = 0;
				field_puntata.setText(puntata_int.toString()+" €");
				ammontare = gstate.getSoldi(lstate.getId());
				field_rimanente.setText(ammontare.toString()+" €");
	
				if (gstate.getToken() != lstate.getId())
					label_turno.setText("Attendi il tuo turno");
				
				if (gstate.getMessage() != null)
					resetTavolo(gstate.getMessage());
				else 
					resetTavolo();
			}
			
			/* Setto il punteggio */
			punteggioMano = Util.calcolaPunteggio(gstate.getCarte(lstate.getId()));
			
			if (punteggioMano == 7.5f)
				Messaggio.setText("SETTE E MEZZO");
		    else if (punteggioMano == 7.6f) {
		    	punteggioMano = punteggioMano - 0.1f;
				Messaggio.setText("SETTE E MEZZO REALE");
		    } else if (punteggioMano > 7.5f)
				Messaggio.setText("SBALLATO");
		
			Punteggio.setText(Float.toString(punteggioMano));
			
			/* Se è il mio turno */
			if (gstate.getToken() == lstate.getId()) {
				/* Se sono il mazziere */
				if (lstate.getId() == gstate.getMazziere().getId()) {
					Carta.setEnabled(true);
					Stai.setEnabled(true);
					Aumenta.setEnabled(false);
				} else {
					if (field_puntata.getText().equals("0 €")) {
						Aumenta.setEnabled(true);
						Carta.setEnabled(false);
						Stai.setEnabled(false);
					} else {
						Aumenta.setEnabled(false);
						Carta.setEnabled(true);
						Stai.setEnabled(true);
					}
				}
				label_turno.setText("");
				
				/* Controllo se è finito il mazzo */
				if (gstate.getDeck().size() == 0) {
					Messaggio.setText("MAZZO FINITO!");
					Aumenta.setEnabled(false);
					Diminuisci.setEnabled(false);
					Punta.setEnabled(false);
					Carta.setEnabled(false);
					Stai.setEnabled(true);
				}
				
			} 
//			else if (gstate.getPuntata(lstate.getId()) == 0) {
//				label_turno.setText("Attendi il tuo turno");
//			}
		}
		
		/* Se sono il mazziere lo scrivo */
		if (lstate.getId() == gstate.getMazziere().getId()) {
			label_mazziere.setText("MAZZIERE");
			Aumenta.setEnabled(false);
			field_puntata.setEnabled(false);
		} else {
			label_mazziere.setText("");
			field_puntata.setEnabled(true);
		}
		
		if (gstate.getCarte(lstate.getId()) != null) {
			
			/* Posiziono le mie carte */
			tavolo.removeAll();
			x_label = 5;
			
			count = 0;
			for (Carta c : gstate.getCarte(lstate.getId())) {
				
				switch(count){
				case 0:
					if (label_cartaCoperta.getIcon() == null) {
						label_cartaCoperta.setIcon(new ImageIcon(pathCarteGrandi + c.getImage()));
						tavolo.add(label_cartaCoperta, new Integer(0));
					}
					break;
				case 1:
					if (label_carta1.getIcon() == null) {
						label_carta1.setIcon(new ImageIcon(pathCarteGrandi + c.getImage()));
						tavolo.add(label_carta1, new Integer(1));
					}
					break;
				case 2:
					if (label_carta2.getIcon() == null) {
						label_carta2.setIcon(new ImageIcon(pathCarteGrandi + c.getImage()));
						tavolo.add(label_carta2, new Integer(2));
					}
					break;
				case 3:
					if (label_carta3.getIcon() == null) {
						label_carta3.setIcon(new ImageIcon(pathCarteGrandi + c.getImage()));
						tavolo.add(label_carta3, new Integer(3));
					}
					break;
				case 4:
					if (label_carta4.getIcon() == null) {
						label_carta4.setIcon(new ImageIcon(pathCarteGrandi + c.getImage()));
						tavolo.add(label_carta4, new Integer(4));
					}
					break;
				case 5:
					if (label_carta5.getIcon() == null) {
						label_carta5.setIcon(new ImageIcon(pathCarteGrandi + c.getImage()));
						tavolo.add(label_carta5, new Integer(5));
					}
					break;
				case 6:
					if (label_carta6.getIcon() == null) {
						label_carta6.setIcon(new ImageIcon(pathCarteGrandi + c.getImage()));
						tavolo.add(label_carta6, new Integer(6));
					}
					break;
				case 7:
					if (label_carta7.getIcon() == null) {
						label_carta7.setIcon(new ImageIcon(pathCarteGrandi + c.getImage()));
						tavolo.add(label_carta7, new Integer(7));
					}
					break;
				case 8:
					if (label_carta8.getIcon() == null) {
						label_carta8.setIcon(new ImageIcon(pathCarteGrandi + c.getImage()));
						tavolo.add(label_carta8, new Integer(8));
					}
					break;
				}
				
				count++;
			}
			
			tavolo.updateUI();
		
		}
		
		listaGiocatori.removeAll();
		
        //---- label_pannelloGiocatori ----
        label_pannelloGiocatori.setHorizontalAlignment(SwingConstants.CENTER);
        label_pannelloGiocatori.setFont(new Font("Purisa", Font.BOLD, 15));
        //label_pannelloGiocatori.setText("Lista Giocatori");
        label_pannelloGiocatori.setText("Carte: " + gstate.getDeck().size());
        Giocatori.add(label_pannelloGiocatori);
        label_pannelloGiocatori.setBounds(25, 5, 225, 40);

        int y = 5;
       
        //inizializzo la lista dei giocatori
        for (Player giocatore : gstate.getRing()) {
        	
            if (giocatore.getId() !=  lstate.getId() && gstate.getSoldi(giocatore.getId()) > 0){
               
            	String diTurno = "";
            	Color colore = Color.black;
            	if (gstate.getToken() == giocatore.getId()){
            		colore = new Color(0, 102, 153);
            		diTurno = " (di turno)";
            	}
            	
            	if (gstate.getMazziere().getId() == giocatore.getId()) {
            		diTurno = " (mazziere)";
            	}
            	
            	if (gstate.getPunteggio(giocatore.getId()) > 7.6f)
            		diTurno = " (sballato)";
            	else if (gstate.getPunteggio(giocatore.getId()) == 7.6f)
            		diTurno = " (7.5 Reale)";
            	
                //---- labelAvversari ----
                JLabel labelAvversari = new JLabel();
                labelAvversari.setName(giocatore.getNamePlayer());
                labelAvversari.setText(giocatore.getNamePlayer()+diTurno+":");
                //if (label_turno.getText() != "Hai perso") label_turno.setText("Attendi il tuo turno");
                labelAvversari.setForeground(colore);                
                listaGiocatori.add(labelAvversari);
                //int coordinate = labelAvversari.getPreferredSize().width;
                //int coordinate = labelAvversari.getPreferredSize().height + 75 + 10;
                labelAvversari.setBounds(20, y, labelAvversari.getPreferredSize().width, 20);
                
                
                int x = 0;
                int z = 118;
                Vector<Carta> aListCarte = gstate.getCarte(giocatore.getId());
                if (aListCarte.size() != 0){
                   
//                	int maz = 0;
//                	if (gstate.getMazziere().getId() == giocatore.getId()){
//                		maz = 15;
//                        JLabel labelMazziere = new JLabel();
//                        labelMazziere.setText("     MAZZIERE");
//                        Aumenta.setEnabled(false);
//                        labelMazziere.setForeground(colore);
//                        listaGiocatori.add(labelMazziere);
//                        labelMazziere.setBounds(coordinate+10, y, labelMazziere.getPreferredSize().width, 20);
//                	}

                    JLabel labelTestoUno = new JLabel();
                    labelTestoUno.setText("Puntata: "+gstate.getPuntata(giocatore.getId())+"€");
                    labelTestoUno.setForeground(colore);
                    listaGiocatori.add(labelTestoUno);
                    //labelTestoUno.setBounds(coordinate+10, maz+y, labelTestoUno.getPreferredSize().width, 20);
                    labelTestoUno.setBounds(20, y + labelAvversari.getPreferredSize().height, labelTestoUno.getPreferredSize().width, 20);

                    JLabel labelTestoDue = new JLabel();
                    labelTestoDue.setText(" - Ammontare: "+gstate.getSoldi(giocatore.getId())+"€");
                    labelTestoDue.setForeground(colore);
                    listaGiocatori.add(labelTestoDue);
                    labelTestoDue.setBounds(20 + labelTestoUno.getPreferredSize().width, y + labelAvversari.getPreferredSize().height, labelTestoDue.getPreferredSize().width, 20);

                    for (Carta c : aListCarte) {
                       
                        x = x + 45;
                       
                        if (aListCarte.indexOf(c) == 0) {
                        
                            //---- label_cartePiccole Carta Coperta ----
                            JLabel label_cartePiccole= new JLabel();
                            if (gstate.getPunteggio(giocatore.getId()) > 7.5f) {
                            	label_cartePiccole.setIcon(new ImageIcon(pathCartePiccole+c.getImage()));
                        	} else {
                        		label_cartePiccole.setIcon(new ImageIcon(pathCarteBack));
                        	}
                            listaGiocatori.add(label_cartePiccole);
        					label_cartePiccole.setBounds(x, y+37, 45, 75);
        					
                        }else if (aListCarte.indexOf(c) > 0 && aListCarte.indexOf(c) < 5 ){
                           
                            //---- label_cartePiccole Avversari----
                            JLabel label_cartePiccole= new JLabel();
                            label_cartePiccole.setIcon(new ImageIcon(pathCartePiccole+c.getImage()));
                            listaGiocatori.add(label_cartePiccole);
                            label_cartePiccole.setBounds(x, y+37, 45, 75);
                            
                        }else if (aListCarte.indexOf(c) >= 5){
                        	z = 190;
                        	//---- label_cartePiccole Avversari----
                            JLabel label_cartePiccole= new JLabel();
                            label_cartePiccole.setIcon(new ImageIcon(pathCartePiccole+c.getImage()));
                            listaGiocatori.add(label_cartePiccole);
                            label_cartePiccole.setBounds(x-225, y+112, 45, 75);
                            
                        }
                    }
                }
               
                y = y + z;
                //coordinate += z;
            }
        }
        listaGiocatori.updateUI();
        
        scroll_listaGiocatori.setAutoscrolls(true);

		//======== listaGiocatori ========
		{
			listaGiocatori.setBackground(new Color(204, 204, 255));
			listaGiocatori.setLayout(null);

			{ // compute preferred size
				Dimension preferredSize = new Dimension();
				for(int i = 0; i < listaGiocatori.getComponentCount(); i++) {
					Rectangle bounds = listaGiocatori.getComponent(i).getBounds();
					preferredSize.width = Math.max(bounds.x + bounds.width, preferredSize.width);
					preferredSize.height = Math.max(bounds.y + bounds.height, preferredSize.height);
				}
				Insets insets = listaGiocatori.getInsets();
				preferredSize.width += insets.right;
				preferredSize.height += insets.bottom;
				listaGiocatori.setMinimumSize(preferredSize);
				listaGiocatori.setPreferredSize(preferredSize);
			}
		}

        scroll_listaGiocatori.setViewportView(listaGiocatori);
        Giocatori.add(scroll_listaGiocatori);
       
        Giocatori.updateUI();
		
		// DEBUG ///// Stampa stato condiviso /////
        System.err.println(Debug.printGlobalState(gstate));
		
	}

	private void GiocatoriPropertyChange(PropertyChangeEvent e) {
		// TODO add your code here
	}

	private void initComponents() {
		
		UIManager.getCrossPlatformLookAndFeelClassName();
		this.setResizable(false);
		
        // JFormDesigner - Component initialization - DO NOT MODIFY  //GEN-BEGIN:initComponents
		IO = new JPanel();
		Carta = new JButton();
		Punta = new JButton();
		labet_puntata = new JLabel();
		field_puntata = new JTextField();
		Stai = new JButton();
		Abbandona = new JButton();
		Aumenta = new JButton();
		label_msg = new JLabel();
		laber_rimanente = new JLabel();
		field_rimanente = new JTextField();
		Punteggio = new JLabel();
		Diminuisci = new JButton();
		Messaggio = new JLabel();
		label_name = new JLabel();
		label_turno = new JLabel();
		label_mazziere = new JLabel();
		tavolo = new JLayeredPane();
		label_cartaCoperta = new JLabel();
		label_carta1 = new JLabel();
		label_carta2 = new JLabel();
		label_carta3 = new JLabel();
		label_carta4 = new JLabel();
		label_carta5 = new JLabel();
		label_carta6 = new JLabel();
		label_carta7 = new JLabel();
		label_carta8 = new JLabel();
		Giocatori = new JPanel();
		label_pannelloGiocatori = new JLabel();
		scroll_listaGiocatori = new JScrollPane();
		listaGiocatori = new JPanel();

		//======== this ========
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		Container contentPane = getContentPane();
		contentPane.setLayout(null);

		//======== IO ========
		{
			IO.setBackground(new Color(0, 153, 51));
			IO.setBorder(new BevelBorder(BevelBorder.LOWERED));
			IO.setLayout(null);

			//---- Carta ----
			Carta.setText("Carta");
			Carta.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					CartaActionPerformed(e);
				}
			});
			IO.add(Carta);
			Carta.setBounds(35, 380, 55, Carta.getPreferredSize().height);

			//---- Punta ----
			Punta.setText("Punta");
			Punta.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					PuntaActionPerformed(e);
				}
			});
			IO.add(Punta);
			Punta.setBounds(450, 380, 55, Punta.getPreferredSize().height);

			//---- labet_puntata ----
			labet_puntata.setText("Puntata:");
			labet_puntata.setForeground(Color.white);
			labet_puntata.setHorizontalAlignment(SwingConstants.RIGHT);
			IO.add(labet_puntata);
			labet_puntata.setBounds(205, 360, 70, 20);

			//---- field_puntata ----
			field_puntata.setHorizontalAlignment(SwingConstants.RIGHT);
			field_puntata.setEditable(false);
			field_puntata.setBackground(Color.white);
			IO.add(field_puntata);
			field_puntata.setBounds(285, 360, 55, field_puntata.getPreferredSize().height);

			//---- Stai ----
			Stai.setText("Stai");
			Stai.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					StaiActionPerformed(e);
				}
			});
			IO.add(Stai);
			Stai.setBounds(95, 380, 55, Stai.getPreferredSize().height);

			//---- Abbandona ----
			Abbandona.setText("Abbandona");
			Abbandona.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					AbbandonaActionPerformed(e);
				}
			});
			IO.add(Abbandona);
			Abbandona.setBounds(590, 380, 94, Abbandona.getPreferredSize().height);

			//---- Aumenta ----
			Aumenta.setText("+");
			Aumenta.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					AumentaActionPerformed(e);
				}
			});
			IO.add(Aumenta);
			Aumenta.setBounds(355, 380, 40, Aumenta.getPreferredSize().height);

			//---- label_msg ----
			label_msg.setText("Scegli la puntata");
			label_msg.setForeground(Color.white);
			IO.add(label_msg);
			label_msg.setBounds(355, 360, 170, label_msg.getPreferredSize().height);

			//---- laber_rimanente ----
			laber_rimanente.setText("Rimanente:");
			laber_rimanente.setForeground(Color.white);
			laber_rimanente.setHorizontalAlignment(SwingConstants.RIGHT);
			IO.add(laber_rimanente);
			laber_rimanente.setBounds(180, 385, 95, 20);

			//---- field_rimanente ----
			field_rimanente.setHorizontalAlignment(SwingConstants.RIGHT);
			field_rimanente.setEditable(false);
			field_rimanente.setBackground(Color.white);
			IO.add(field_rimanente);
			field_rimanente.setBounds(285, 385, 55, field_rimanente.getPreferredSize().height);

			//---- Punteggio ----
			Punteggio.setText("0");
			Punteggio.setForeground(Color.white);
			Punteggio.setFont(new Font("Purisa", Font.BOLD, 48));
			Punteggio.setHorizontalAlignment(SwingConstants.RIGHT);
			IO.add(Punteggio);
			Punteggio.setBounds(555, 20, 125, 40);

			//---- Diminuisci ----
			Diminuisci.setText("-");
			Diminuisci.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					DiminuisciActionPerformed(e);
				}
			});
			IO.add(Diminuisci);
			Diminuisci.setBounds(400, 380, 40, Diminuisci.getPreferredSize().height);

			//---- Messaggio ----
			Messaggio.setFont(new Font("Purisa", Font.BOLD, 30));
			Messaggio.setForeground(Color.red);
			IO.add(Messaggio);
			Messaggio.setBounds(40, 22, 480, 40);

			//---- label_name ----
			label_name.setHorizontalAlignment(SwingConstants.RIGHT);
			label_name.setFont(new Font("Purisa", Font.BOLD, 26));
			label_name.setText("Amanda");
			label_name.setForeground(new Color(204, 204, 255));
			IO.add(label_name);
			label_name.setBounds(490, 335, 195, 40);

			//---- label_turno ----
			label_turno.setFont(new Font("Purisa", Font.BOLD, 26));
			label_turno.setForeground(Color.red);
			label_turno.setText("Attendi il tuo turno");
			IO.add(label_turno);
			label_turno.setBounds(30, 305, 440, 45);

			//---- label_mazziere ----
			label_mazziere.setHorizontalAlignment(SwingConstants.RIGHT);
			label_mazziere.setFont(new Font("Purisa", Font.BOLD, 26));
			label_mazziere.setForeground(new Color(204, 204, 255));
			IO.add(label_mazziere);
			label_mazziere.setBounds(465, 300, 220, 35);

			//======== tavolo ========
			{

				//---- label_cartaCoperta ----
				label_cartaCoperta.setIcon(null);
				label_cartaCoperta.setBackground(Color.white);
				tavolo.add(label_cartaCoperta, JLayeredPane.DEFAULT_LAYER);
				label_cartaCoperta.setBounds(5, 15, 100, 185);

				//---- label_carta1 ----
				label_carta1.setIcon(null);
				label_carta1.setBackground(Color.white);
				tavolo.add(label_carta1, JLayeredPane.DEFAULT_LAYER);
				label_carta1.setBounds(110, 15, 100, 185);

				//---- label_carta2 ----
				label_carta2.setIcon(null);
				label_carta2.setBackground(Color.white);
				tavolo.add(label_carta2, JLayeredPane.DEFAULT_LAYER);
				label_carta2.setBounds(175, 15, 100, 185);

				//---- label_carta3 ----
				label_carta3.setIcon(null);
				label_carta3.setBackground(Color.white);
				tavolo.add(label_carta3, JLayeredPane.DEFAULT_LAYER);
				label_carta3.setBounds(240, 15, 100, 185);

				//---- label_carta4 ----
				label_carta4.setIcon(null);
				label_carta4.setBackground(Color.white);
				tavolo.add(label_carta4, JLayeredPane.DEFAULT_LAYER);
				label_carta4.setBounds(305, 15, 100, 185);

				//---- label_carta5 ----
				label_carta5.setIcon(null);
				label_carta5.setBackground(Color.white);
				tavolo.add(label_carta5, JLayeredPane.DEFAULT_LAYER);
				label_carta5.setBounds(370, 15, 100, 185);
				tavolo.add(label_carta6, JLayeredPane.DEFAULT_LAYER);
				label_carta6.setBounds(435, 15, 100, 185);
				tavolo.add(label_carta7, JLayeredPane.DEFAULT_LAYER);
				label_carta7.setBounds(500, 15, 100, 185);
				tavolo.add(label_carta8, JLayeredPane.DEFAULT_LAYER);
				label_carta8.setBounds(565, 15, 100, 185);
			}
			IO.add(tavolo);
			tavolo.setBounds(20, 75, 685, 225);

			{ // compute preferred size
				Dimension preferredSize = new Dimension();
				for(int i = 0; i < IO.getComponentCount(); i++) {
					Rectangle bounds = IO.getComponent(i).getBounds();
					preferredSize.width = Math.max(bounds.x + bounds.width, preferredSize.width);
					preferredSize.height = Math.max(bounds.y + bounds.height, preferredSize.height);
				}
				Insets insets = IO.getInsets();
				preferredSize.width += insets.right;
				preferredSize.height += insets.bottom;
				IO.setMinimumSize(preferredSize);
				IO.setPreferredSize(preferredSize);
			}
		}
		contentPane.add(IO);
		IO.setBounds(0, 0, 715, 425);

		//======== Giocatori ========
		{
			Giocatori.setBackground(new Color(204, 204, 255));
			Giocatori.addPropertyChangeListener(new PropertyChangeListener() {
				public void propertyChange(PropertyChangeEvent e) {
					GiocatoriPropertyChange(e);
				}
			});
			Giocatori.setLayout(null);

			//---- label_pannelloGiocatori ----
			label_pannelloGiocatori.setHorizontalAlignment(SwingConstants.CENTER);
			label_pannelloGiocatori.setFont(new Font("Purisa", Font.BOLD, 15));
			label_pannelloGiocatori.setText("Lista da inizializzare");
			Giocatori.add(label_pannelloGiocatori);
			label_pannelloGiocatori.setBounds(10, 5, 310, 40);

			//======== scroll_listaGiocatori ========
			{
				scroll_listaGiocatori.setBackground(new Color(204, 204, 255));
				scroll_listaGiocatori.setAutoscrolls(true);

				//======== listaGiocatori ========
				{
					listaGiocatori.setBackground(new Color(204, 204, 255));
					listaGiocatori.setLayout(null);

					{ // compute preferred size
						Dimension preferredSize = new Dimension();
						for(int i = 0; i < listaGiocatori.getComponentCount(); i++) {
							Rectangle bounds = listaGiocatori.getComponent(i).getBounds();
							preferredSize.width = Math.max(bounds.x + bounds.width, preferredSize.width);
							preferredSize.height = Math.max(bounds.y + bounds.height, preferredSize.height);
						}
						Insets insets = listaGiocatori.getInsets();
						preferredSize.width += insets.right;
						preferredSize.height += insets.bottom;
						listaGiocatori.setMinimumSize(preferredSize);
						listaGiocatori.setPreferredSize(preferredSize);
					}
				}
				scroll_listaGiocatori.setViewportView(listaGiocatori);
			}
			Giocatori.add(scroll_listaGiocatori);
			scroll_listaGiocatori.setBounds(10, 45, 310, 370);

			{ // compute preferred size
				Dimension preferredSize = new Dimension();
				for(int i = 0; i < Giocatori.getComponentCount(); i++) {
					Rectangle bounds = Giocatori.getComponent(i).getBounds();
					preferredSize.width = Math.max(bounds.x + bounds.width, preferredSize.width);
					preferredSize.height = Math.max(bounds.y + bounds.height, preferredSize.height);
				}
				Insets insets = Giocatori.getInsets();
				preferredSize.width += insets.right;
				preferredSize.height += insets.bottom;
				Giocatori.setMinimumSize(preferredSize);
				Giocatori.setPreferredSize(preferredSize);
			}
		}
		contentPane.add(Giocatori);
		Giocatori.setBounds(715, 0, 330, 425);

		{ // compute preferred size
			Dimension preferredSize = new Dimension();
			for(int i = 0; i < contentPane.getComponentCount(); i++) {
				Rectangle bounds = contentPane.getComponent(i).getBounds();
				preferredSize.width = Math.max(bounds.x + bounds.width, preferredSize.width);
				preferredSize.height = Math.max(bounds.y + bounds.height, preferredSize.height);
			}
			Insets insets = contentPane.getInsets();
			preferredSize.width += insets.right;
			preferredSize.height += insets.bottom;
			contentPane.setMinimumSize(preferredSize);
			contentPane.setPreferredSize(preferredSize);
		}
		pack();
		setLocationRelativeTo(getOwner());
        // JFormDesigner - End of component initialization  //GEN-END:initComponents
    }


	// JFormDesigner - Variables declaration - DO NOT MODIFY  //GEN-BEGIN:variables
	private JPanel IO;
	private JButton Carta;
	private JButton Punta;
	private JLabel labet_puntata;
	private JTextField field_puntata;
	private JButton Stai;
	private JButton Abbandona;
	private JButton Aumenta;
	private JLabel label_msg;
	private JLabel laber_rimanente;
	private JTextField field_rimanente;
	private JLabel Punteggio;
	private JButton Diminuisci;
	private JLabel Messaggio;
	private JLabel label_name;
	private JLabel label_turno;
	private JLabel label_mazziere;
	private JLayeredPane tavolo;
	private JLabel label_cartaCoperta;
	private JLabel label_carta1;
	private JLabel label_carta2;
	private JLabel label_carta3;
	private JLabel label_carta4;
	private JLabel label_carta5;
	private JLabel label_carta6;
	private JLabel label_carta7;
	private JLabel label_carta8;
	private JPanel Giocatori;
	private JLabel label_pannelloGiocatori;
	private JScrollPane scroll_listaGiocatori;
	private JPanel listaGiocatori;
	// JFormDesigner - End of variables declaration  //GEN-END:variables

}